конструкция is literal

This commit is contained in:
Александр Погорелов 2019-01-11 10:03:54 +03:00
parent bd78e1a969
commit 3ada32a1f3
4 changed files with 1819 additions and 1785 deletions

View file

@ -1,9 +1,9 @@
//
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-G8V08V4
// DateTime: 26.12.2018 21:06:31
// UserName: ?????????
// Machine: DESKTOP-IF20NRO
// DateTime: 1/11/2019 9:57:02 AM
// UserName: FatCow
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>
//

View file

@ -3492,6 +3492,10 @@ is_expr
{
$$ = NewAsIsExpr($1, op_typecast.is_op, $3, @$);
}
| term tkIs literal_or_number
{
$$ = NewIsObjectExpr($1, $3, @$);
}
;
simple_term

File diff suppressed because it is too large Load diff

View file

@ -321,6 +321,29 @@ namespace GPPGParserScanner
return naie;
}
public method_call NewIsObjectExpr(syntax_tree_node left_term, syntax_tree_node right_term, LexLocation loc)
{
var eq_params = new expression_list(
new List<expression>()
{
(addressed_value)left_term,
(addressed_value)right_term
}
);
var equals_call_node = new method_call(
new dot_node(new ident("object"), new ident("Equals")),
eq_params,
loc);
if (!(left_term is addressed_value))
parsertools.errors.Add(new bad_operand_type(parsertools.CurrentFileName, left_term.source_context, equals_call_node));
if (!(right_term is addressed_value))
parsertools.errors.Add(new bad_operand_type(parsertools.CurrentFileName, right_term.source_context, equals_call_node));
return equals_call_node;
}
public function_lambda_call NewFactor(ident func_decl_lambda, expression_list expr_list, LexLocation loc)
{
var fld = parsertools.find_pascalABC_lambda_name(func_decl_lambda.name);