summaryrefslogtreecommitdiff
path: root/compiler/nld.pas
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-12-27 13:18:56 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-12-27 13:18:56 +0000
commit84aee394509503def889a90836300d08e06f67d5 (patch)
treeea551c6fb898d1cf2952dc960a9a2f974228aafb /compiler/nld.pas
parentcb3ac5126014087fc1f6965f752726a9db239d03 (diff)
downloadfpc-84aee394509503def889a90836300d08e06f67d5.tar.gz
* factored out the creation of loadnodes for special variables/parameters
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47857 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/nld.pas')
-rw-r--r--compiler/nld.pas28
1 files changed, 27 insertions, 1 deletions
diff --git a/compiler/nld.pas b/compiler/nld.pas
index ab05bd8776..c6eab85ecf 100644
--- a/compiler/nld.pas
+++ b/compiler/nld.pas
@@ -182,6 +182,10 @@ interface
{ Current assignment node }
aktassignmentnode : tassignmentnode;
+ { Create a node tree to load a variable if symbol is assigned, otherwise an error node.
+ Generates an internalerror if called for an absolutevarsym of the "tovar" kind (those
+ are only supported for expansion in the parser) }
+ function gen_load_var(sym: tabstractvarsym): tnode;
implementation
@@ -192,10 +196,32 @@ implementation
defutil,defcmp,
cpuinfo,
htypechk,pass_1,procinfo,paramgr,
- ncon,nflw,ninl,ncnv,nmem,ncal,nutils,
+ nbas,ncon,nflw,ninl,ncnv,nmem,ncal,nutils,
cgbase
;
+
+ function gen_load_var(sym: tabstractvarsym): tnode;
+ begin
+ result:=nil;
+ if assigned(sym) then
+ begin
+ if (sym.typ<>absolutevarsym) or
+ (tabsolutevarsym(sym).abstyp<>tovar) then
+ begin
+ result:=cloadnode.create(sym,sym.owner);
+ end
+ else
+ internalerror(2020122601);
+ end
+ else
+ begin
+ result:=cerrornode.create;
+ CGMessage(parser_e_illegal_expression);
+ end;
+ end;
+
+
{*****************************************************************************
TLOADNODE
*****************************************************************************}