예제 #1
0
파일: Binder.cs 프로젝트: odalet/slang
        private Expression BindNameExpression(NameExpressionNode node)
        {
            VariableExpression variableExpression = null;
            var name = node.Identifier.Text;

            if (Scope.TryLookupVariable(name, out var variable))
            {
                variableExpression = new VariableExpression(variable);
            }

            if (variableExpression == null || node.Identifier.IsForged)
            {
                diagnostics.ReportUndefinedVariable(node.Identifier, name);
                return(new InvalidExpression(variableExpression));
            }

            return(variableExpression);
        }
예제 #2
0
 private void Write(NameExpressionNode exp)
 {
     _code.Append(exp.Value);
 }
예제 #3
0
파일: statements.cs 프로젝트: odalet/slang
 internal LabelStatementNode(NameExpressionNode label) => Label = label ?? throw new ArgumentNullException(nameof(label));
예제 #4
0
파일: statements.cs 프로젝트: odalet/slang
 internal GotoStatementNode(Token gotoToken, NameExpressionNode label)
 {
     GotoToken = gotoToken ?? throw new ArgumentNullException(nameof(gotoToken));
     Label     = label ?? throw new ArgumentNullException(nameof(label));
 }