mu/edit.mu
Kartik K. Agaram d1c1221822 497 - strengthen the concept of 'space'
'default-scope' is now 'default-space'
'closure-generator' is now 'next-space-generator'
The connection to high-level syntax for closures is now tenuous, so
we'll call the 'outer scope' the 'next space'.

So, let's try to create a few sentences with all these related ideas:

  Names map to addresses offset from a default-space when it's provided.

  Spaces can be strung together. The zeroth variable points to the next
  space, the one that is accessed when a variable has /space:1.

  To map a name to an address in the next space, you need to know what
  function generated that space. A corollary is that the space passed in
  to a function should always be generated by a single function.

Spaces can be used to construct lexical scopes and objects.
2015-01-02 18:20:18 -08:00

19 lines
813 B
Plaintext

; a screen is an array of pointers to lines, in turn arrays of characters
(function new-screen [
(default-space:space-address <- new space:literal 30:literal)
(nrows:integer <- next-input)
(ncols:integer <- next-input)
(result:screen-address <- new screen:literal nrows:integer)
(rowidx:integer <- copy 0:literal)
{ begin
(curr-line-address-address:line-address-address <- index-address result:screen-address/deref rowidx:integer)
(curr-line-address-address:line-address-address/deref <- new line:literal ncols:integer)
(curr-line-address:line-address <- copy curr-line-address-address:line-address-address/deref)
(rowidx:integer <- add rowidx:integer 1:literal)
(x:boolean <- not-equal rowidx:integer nrows:integer)
(loop-if x:boolean)
}
(reply result:screen-address)
])