diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2018-10-31 15:05:17 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2018-10-31 15:05:17 -0700 |
| commit | 7a35e38d8778670fe0662f203e82638355db3bba (patch) | |
| tree | cc9f813d1350f23d2b81a81b18f4f127668bfec9 /nomnom/code_obj.nom | |
| parent | f43d8c58f755a7f208d84b43071490ab356c5ac8 (diff) | |
Renamed (action %) -> (%'s meaning)
Diffstat (limited to 'nomnom/code_obj.nom')
| -rw-r--r-- | nomnom/code_obj.nom | 132 |
1 files changed, 69 insertions, 63 deletions
diff --git a/nomnom/code_obj.nom b/nomnom/code_obj.nom index 363713c..8379f36 100644 --- a/nomnom/code_obj.nom +++ b/nomnom/code_obj.nom @@ -1,25 +1,19 @@ +#!/usr/bin/env nomsu -V4.8.10 # This file contains objects that are used to track code positions and incrementally build up generated code, while keeping track of where it came from, and managing indentation levels. - use "lib/object.nom" object (Hole): - action [Hole from %lua]: + externally (Hole from %lua) means: return (Hole {lua:%lua}) - - my action [as lua]: - return %me.lua - + my action [as lua]: return %me.lua my action [as nomsu]: return "(Hole {lua:\(%me.lua)})" - my action [as text]: barf "Not implemented" - my action [as smext]: barf "Must fill in holes before smexting" - object (Code): my action [set up]: @@ -28,12 +22,10 @@ object (Code): %me.bits = [] if (%me.source is text): %me.source = (Source from text %me.source) - for % in %old_bits: - %me::add % - + for % in %old_bits: %me::add % + my action [as text]: barf "Not implemented" - my action [as smext]: if (%me.__str == (nil)): set {%buff:[], %indent:0} @@ -45,32 +37,41 @@ object (Code): %bit = (%bit::as smext) if (%indent > 0): %bit = (%bit::with "\n" -> "\n\(" "::* %indent)") + %buff::add %bit + %me.__str = (%buff::joined) + return %me.__str - + my action [as lua]: barf - return "\(%me.class.name::as lua id)_from_1_2(\((%me.source::as lua) if %me.source else "nil"), \(%me.bits::as lua))" - - my action [as nomsu] (..) - "(\(%me.class.name) \((%me.source::as nomsu) if %me.source else "(nil)") \(%me.bits::as nomsu))" - - my action [size] (size of (%me::as smext)) + return "\ + ..\(%me.class.name::as lua id)_from_1_2(\(..) + (%me.source::as lua) if %me.source else "nil" + .., \(%me.bits::as lua))" + + my action [as nomsu] "\ + ..(\(%me.class.name) \((%me.source::as nomsu) if %me.source else "(nil)") \(..) + %me.bits::as nomsu + ..)" + my action [size] (size of (%me::as smext)) my action [mark as dirty]: %me.__str = (nil) %me._trailing_line_len = (nil) %me._num_lines = (nil) - + my action [add %new_bits]: unless (%new_bits is a "List"): %new_bits = [%new_bits] for % in %new_bits: if (% == ""): do next % + #if ((% isn't text) and (% isn't a (Code))): % = (%::as lua) %me.bits::add % + %me::mark as dirty my action [trailing line length]: @@ -86,15 +87,15 @@ object (Code): %num_lines += (size of (%::all matches of "\n")) ..else: %num_lines += ((%::number of lines) - 1) + %me._num_lines = %num_lines + return %me._num_lines - + my action [is multiline, is multi-line] ((%me::number of lines) > 1) my action [is one line, is single line] ((%me::number of lines) == 1) - my action [add %values joined with %joiner]: %me::add %values joined with %joiner or %joiner - my action [add %values joined with %joiner or %wrapping_joiner]: %line_len = 0 %bits = %me.bits @@ -103,8 +104,8 @@ object (Code): if (%line_len > 80): %bits::add %wrapping_joiner %line_len = 0 - ..else: - %bits::add %joiner + ..else: %bits::add %joiner + %bits::add %value unless (%value is text): %value = (%value::as smext) @@ -113,6 +114,7 @@ object (Code): %line_len = (size of %line) ..else: %line_len += (size of %value) + %me::mark as dirty my action [prepend %]: @@ -120,13 +122,12 @@ object (Code): % = (%::as lua) %me.bits::add % at index 1 %me::mark as dirty - + my action [parenthesize]: %me.bits::add "(" at index 1 %me.bits::add ")" %me::mark as dirty - object (Lua Code) extends (Code): my action [add free vars %vars]: if ((size of %vars) == 0): return @@ -136,6 +137,7 @@ object (Lua Code) extends (Code): unless %seen.%var: %me.free_vars::add %var %seen.%var = (yes) + %me::mark as dirty my action [remove free vars %vars]: @@ -153,11 +155,13 @@ object (Lua Code) extends (Code): lua> "table.remove(\%lua.free_vars, \%i)" #TODO: reinstate this #%lua.free_vars::remove at index %i + + for % in %lua.bits: - unless (% is text): - %stack::add % + unless (% is text): %stack::add % + %me::mark as dirty - + my action [declare locals] (%me::declare locals (nil)) my action [declare locals %to_declare]: unless %to_declare: @@ -167,19 +171,19 @@ object (Lua Code) extends (Code): unless %seen.%var: %seen.%var = (yes) %to_declare::add %var + for % in %lua.bits: - unless (% is text): - recurse %lua on % + unless (% is text): recurse %lua on % + if ((size of %to_declare) > 0): %me::remove free vars %to_declare %me::prepend "local \(%to_declare::joined with ", ");\n" return %to_declare - + my action [as statements] (%me::as statements "" ";") my action [as statements %prefix] (%me::as statements %prefix ";") my action [as statements %prefix %suffix]: - unless %me.is_value: - return %me + unless %me.is_value: return %me %statements = (Lua Code from %me.source []) if ((%prefix or "") != ""): %statements::add %prefix @@ -194,46 +198,48 @@ object (Lua Code) extends (Code): if %code.is_variable: %vars::add (%code::as smext) for % in %code.bits: - unless (% is text): - recurse %code on % + unless (% is text): recurse %code on % + return %vars - - action [Lua Code from %source %bits]: + + externally (Lua Code from %source %bits) means: assume %source unless (%bits is a "List"): %bits = [%bits] - if (%source is a "Syntax Tree"): %source = %source.source - return (..) - Lua Code {source:%source, bits:%bits, is_value: no, free_vars:[]} - action [Lua Code from %source] (Lua Code from %source []) - - action [Lua Value from %source %bits]: + if (%source is a "Syntax Tree"): + %source = %source.source + return (Lua Code {source:%source, bits:%bits, is_value:no, free_vars:[]}) + + externally (Lua Code from %source) means (Lua Code from %source []) + externally (Lua Value from %source %bits) means: assume %source unless (%bits is a "List"): %bits = [%bits] - if (%source is a "Syntax Tree"): %source = %source.source - return (..) - Lua Code {source:%source, bits:%bits, is_value: yes, free_vars:[]} - action [Lua Value from %source] (Lua Value from %source []) - - action [Lua Variable from %source] (Lua Variable from %source []) - action [Lua Variable from %source %bits]: + if (%source is a "Syntax Tree"): + %source = %source.source + return (Lua Code {source:%source, bits:%bits, is_value:yes, free_vars:[]}) + + externally (Lua Value from %source) means (Lua Value from %source []) + externally (Lua Variable from %source) means (Lua Variable from %source []) + externally (Lua Variable from %source %bits) means: assume %source unless (%bits is a "List"): %bits = [%bits] - if (%source is a "Syntax Tree"): %source = %source.source + if (%source is a "Syntax Tree"): + %source = %source.source return (..) - Lua Code {source:%source, bits:%bits, is_value: yes, is_variable: yes, free_vars:[]} + Lua Code {..} + source:%source, bits:%bits, is_value:yes, is_variable:yes, free_vars:[] # TODO: remove this shim (Lua Code).add_free_vars = (Lua Code).add_free_vars_1 (Lua Code).remove_free_vars = (Lua Code).remove_free_vars_1 (Lua Code).declare_locals = (Lua Code).declare_locals_1 (Lua Code).as_statements = (Lua Code).as_statements_1_2 - object (Nomsu Code) extends (Code): - action [Nomsu Code from %source %bits]: + externally (Nomsu Code from %source %bits) means: if (%bits is text): %bits = [%bits] - if (%source is a "Syntax Tree"): %source = %source.source - return (..) - Nomsu Code {source:%source, bits:%bits} - action [Nomsu Code from %source] (Nomsu Code from %source []) - action [Nomsu Code %bits] (Nomsu Code from (nil) %bits) - action [Nomsu Code] (Nomsu Code from (nil) []) + if (%source is a "Syntax Tree"): + %source = %source.source + return (Nomsu Code {source:%source, bits:%bits}) + + externally (Nomsu Code from %source) means (Nomsu Code from %source []) + externally (Nomsu Code %bits) means (Nomsu Code from (nil) %bits) + externally (Nomsu Code) means (Nomsu Code from (nil) []) |
