@Override public void visit(NewMultiArrayExpr expr) { pushLocation(expr.getLocation()); try { for (int i = 0; i < expr.getDimensions().size(); ++i) { Expr dimension = expr.getDimensions().get(i); dimension.acceptVisitor(this); expr.getDimensions().set(i, resultExpr); } resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(NewMultiArrayExpr expr) { ValueType type = expr.getType(); WasmBlock block = new WasmBlock(false); block.setType(WasmType.INT32); int dimensionList = -1; for (Expr dimension : expr.getDimensions()) { int dimensionAddress = binaryWriter.append(DataPrimitives.INT.createValue()); if (dimensionList < 0) { dimensionList = dimensionAddress; } accept(dimension); block.getBody().add(new WasmStoreInt32(4, new WasmInt32Constant(dimensionAddress), result, WasmInt32Subtype.INT32)); } int classPointer = classGenerator.getClassPointer(ValueType.arrayOf(type)); String allocName = context.names.forMethod(new MethodReference(Allocator.class, "allocateMultiArray", RuntimeClass.class, Address.class, int.class, RuntimeArray.class)); WasmCall call = new WasmCall(allocName); call.getArguments().add(new WasmInt32Constant(classPointer)); call.getArguments().add(new WasmInt32Constant(dimensionList)); call.getArguments().add(new WasmInt32Constant(expr.getDimensions().size())); call.setLocation(expr.getLocation()); block.getBody().add(call); result = block; }
@Override public void visit(NewMultiArrayExpr expr) { try { if (expr.getLocation() != null) { pushLocation(expr.getLocation()); if (expr.getLocation() != null) { popLocation();
@Override public void visit(NewMultiArrayExpr expr) { pushLocation(expr.getLocation()); try { for (int i = 0; i < expr.getDimensions().size(); ++i) { Expr dimension = expr.getDimensions().get(i); dimension.acceptVisitor(this); expr.getDimensions().set(i, resultExpr); } resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(NewMultiArrayExpr expr) { ValueType type = expr.getType(); WasmBlock block = new WasmBlock(false); block.setType(WasmType.INT32); int dimensionList = -1; for (Expr dimension : expr.getDimensions()) { int dimensionAddress = binaryWriter.append(DataPrimitives.INT.createValue()); if (dimensionList < 0) { dimensionList = dimensionAddress; } accept(dimension); block.getBody().add(new WasmStoreInt32(4, new WasmInt32Constant(dimensionAddress), result, WasmInt32Subtype.INT32)); } int classPointer = classGenerator.getClassPointer(ValueType.arrayOf(type)); String allocName = WasmMangling.mangleMethod(new MethodReference(Allocator.class, "allocateMultiArray", RuntimeClass.class, Address.class, int.class, RuntimeArray.class)); WasmCall call = new WasmCall(allocName); call.getArguments().add(new WasmInt32Constant(classPointer)); call.getArguments().add(new WasmInt32Constant(dimensionList)); call.getArguments().add(new WasmInt32Constant(expr.getDimensions().size())); call.setLocation(expr.getLocation()); block.getBody().add(call); result = block; }
@Override public void visit(NewMultiArrayExpr expr) { try { if (expr.getLocation() != null) { pushLocation(expr.getLocation()); if (expr.getLocation() != null) { popLocation();