public void ProcessStatementVarDeclaration(DMASTProcStatementVarDeclaration varDeclaration) { if (varDeclaration.IsGlobal) { return; } //Currently handled by DMObjectBuilder DMExpression value; if (varDeclaration.Value != null) { try { value = DMExpression.Create(_dmObject, _proc, varDeclaration.Value, varDeclaration.Type); } catch (CompileErrorException e) { DMCompiler.Error(e.Error); value = new Expressions.Null(varDeclaration.Location); } } else { value = new Expressions.Null(varDeclaration.Location); } bool successful; if (varDeclaration.IsConst) { if (!value.TryAsConstant(out var constValue)) { DMCompiler.Error(new CompilerError(varDeclaration.Location, "Const var must be set to a constant")); return; } successful = _proc.TryAddLocalConstVariable(varDeclaration.Name, varDeclaration.Type, constValue); } else { successful = _proc.TryAddLocalVariable(varDeclaration.Name, varDeclaration.Type); } if (!successful) { DMCompiler.Error(new CompilerError(varDeclaration.Location, $"Duplicate var {varDeclaration.Name}")); return; } value.EmitPushValue(_dmObject, _proc); _proc.Assign(_proc.GetLocalVariableReference(varDeclaration.Name)); _proc.Pop(); }
public void VisitStringFormat(DMASTStringFormat stringFormat) { var expressions = new DMExpression[stringFormat.InterpolatedValues.Length]; for (int i = 0; i < stringFormat.InterpolatedValues.Length; i++) { if (stringFormat.InterpolatedValues[i] is null) { expressions[i] = new Expressions.Null(stringFormat.Location); } else { expressions[i] = DMExpression.Create(_dmObject, _proc, stringFormat.InterpolatedValues[i], _inferredPath); } } Result = new Expressions.StringFormat(stringFormat.Location, stringFormat.Value, expressions); }