Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. ProcedureDefinition :
  2. sIdentifier oSymbolStkPushLocalIdentifier % procedure name
  3. [ oSymbolStkChooseKind
  4. | syUndefined:
  5. | syExternal:
  6. % Program parameters must be declared as file variables
  7. #eExternalDeclare
  8. | *:
  9. #eMultiplyDefined
  10. % New definition obscures old one.
  11. ]
  12. %%%%%%%%%%% ADDED
  13. [
  14. | sPublic:
  15. oSymbolStkSetKind(syPublicProcedure)
  16. | *:
  17. oSymbolStkSetKind(syProcedure)
  18. ]
  19. %%%%%%%%%%%
  20. .tSkipProc % Branch around the procedure definition
  21. oFixPushForwardBranch
  22. oEmitNullAddress
  23. %%%%%%%%%%% DELETED
  24. % oSymbolStkSetKind(syProcedure)
  25. %%%%%%%%%%%
  26. oSymbolStkEnterCodeAddress
  27. oTypeStkPush(tpNull)
  28. oTypeStkSetRecursionFlag(yes)
  29. oTypeTblEnter
  30. oSymbolStkEnterTypeReference
  31. oSymbolTblEnter
  32. oSymbolTblPushScope % procedure scope
  33. @ProcedureHeading
  34.  
  35. %%%%%%%%%%% CHANGED 858
  36. % @Block
  37. %%%%%%%%%%%
  38. % If there is a return type, it is a function
  39. [
  40. | sIdentifier:
  41. [ oSymbolStkChooseKind % of this procedure
  42. | syProcedure:
  43. oSymbolStkSetKind(syFunction)
  44. | syPublicProcedure:
  45. oSymbolStkSetKind(syPublicFunction)
  46. ]
  47. % Process the return type identifier we just accepted
  48. @FunctionReturnType
  49. @Block
  50. % Every function ends with a return statement
  51. sReturn
  52. @FunctionReturnValue
  53. | *:
  54. @Block
  55. ]
  56. %%%%%%%%%%%
  57.  
  58. .tProcedureEnd
  59. oFixPopForwardBranch % fix skip around procedure
  60. oSymbolTblUpdate
  61. oSymbolStkPop
  62. oTypeStkSetRecursionFlag(no)
  63. oTypeTblUpdate
  64. oTypeStkPop
  65. oSymbolTblPopScope;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement