diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-12-27 13:18:56 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-12-27 13:18:56 +0000 |
commit | 84aee394509503def889a90836300d08e06f67d5 (patch) | |
tree | ea551c6fb898d1cf2952dc960a9a2f974228aafb /compiler/nld.pas | |
parent | cb3ac5126014087fc1f6965f752726a9db239d03 (diff) | |
download | fpc-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.pas | 28 |
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 *****************************************************************************} |