Cface__SmalltalkXGenerator.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 27 May 2008 18:55:24 +0000
changeset 1 b6c0180314d1
child 2 cfd2c393abfe
permissions -rw-r--r--
Initial import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'cvut:fel/cface' }"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: Cface }"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
Generator subclass:#SmalltalkXGenerator
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:''
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'Cface-Generators'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!SmalltalkXGenerator class methodsFor:'instance creation'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
generate:aStringOrFilename class:aClass namespace:aNameSpace 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    |temp|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    temp := Generator onFile:aStringOrFilename.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    temp 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
        startGeneration:aClass
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
        nameSpace:aNameSpace
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
        toFile:aStringOrFilename , '.st'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    ^ temp.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    "Created: / 08-02-2008 / 08:55:08 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
new
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    ^ self basicNew initialize.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    "Created: / 08-02-2008 / 08:55:08 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
on: aStream
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    |gen|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    gen := self new.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    gen inputStream: aStream;
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
        parseDef;
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
        analyse.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    ^gen
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    "Modified: / 24-11-2007 / 12:20:27 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    "Created: / 08-02-2008 / 08:55:08 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
onFile: aStringOrFilename
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    ^self on: aStringOrFilename asFilename readStream
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    "Created: / 08-02-2008 / 08:55:08 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
!SmalltalkXGenerator methodsFor:'accessing'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
analyser
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    ^ analyser
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
analyser:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    analyser := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
cBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    ^ cBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
cBuilder:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    cBuilder := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
className
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    ^ className
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
className:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    className := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
defaultCBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    ^CCodeBuilder on:outputStream.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
"    ^CCodeBuilder on:String new writeStream"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
defaultParser
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    ^Parser
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
defaultStBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    ^OldSmalltalkCodeBuilder on:outputStream.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
"    ^CCodeBuilder on:String new writeStream"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    "Modified: / 13-02-2008 / 08:07:12 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
fundamentalTypes
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
Possible combinations:
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
char
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
signed char
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
unsigned char
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
int, signed int
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
short int, short, signed short int, signed short
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
long int, long, signed long int,signed long
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
unsigned int, unsigned
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
unsigned short int, unsigned short
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
unsigned long int, unsigned long
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
float
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
double
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
long double
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    ^#('char' 'short' 'int' 'long' 'float' 'double' 'void' 'signed' 'unsigned').
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
inputStream
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    ^ inputStream
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
inputStream:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
    inputStream := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
nameSpace
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
    ^ nameSpace
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
nameSpace:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    nameSpace := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
outputStream
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    ^ outputStream
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
outputStream:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
    outputStream := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
parentNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    ^ parentNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
parentNode:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
    parentNode := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
parseTree
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    ^ parseTree
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
parseTree:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
    parseTree := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
parser
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    ^ parser
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
parser:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    parser := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
prototypes
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    ^ prototypes
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
prototypes:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    prototypes := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
stBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    ^ stBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
stBuilder:something
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
    stBuilder := something.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
streamContents
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    ^outputStream streamContents
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
!SmalltalkXGenerator methodsFor:'actions'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
analyse
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    prototypes := analyser on:parseTree.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
    "Modified: / 17-11-2007 / 09:12:31 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
parseDef
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    parser := self defaultParser on:inputStream.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    parser parse.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    parseTree := parser nodeStack first.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
startGeneration:aClassName nameSpace:aNameSpace 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    className := aClassName.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
    namespace := aNameSpace.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
    self visit:parseTree.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
startGeneration:aClassName nameSpace:aNameSpace toFile:aFileName 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
    className := aClassName.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
    namespace := aNameSpace.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
    self visit:parseTree.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
    self writeToFile:aFileName.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
!SmalltalkXGenerator methodsFor:'generators'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
generateArrayCompositeStructAccessMethod:aStructOrUnionFieldNode in:aStructFieldNode in:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
        methodFor:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
            self 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
                nextPutString:aStructFieldNode name , '_' , aStructOrUnionFieldNode name 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
                        , 'At:position'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
            self generateCommentFor:aStructOrUnionFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
                        if:[ self nextPutString:'not __isInteger( position )'. ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
                                        withString:'"Argument position is not integer"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
                        else:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
                                declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
                                asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
                                init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
                            self cBuilder returnMacro:true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
                                with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
                                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
                                        functionCall:[ self cBuilder objectCreation:aStructFieldNode id ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
                                        withString:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
                                            self cBuilder struct:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
                                                access:aStructFieldNode name , '[__longIntVal(position)]' , '.' 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
                                                        , aStructOrUnionFieldNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
                                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
        methodFor:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
        category:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
            self 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
                nextPutString:aStructFieldNode name , '_' , aStructOrUnionFieldNode name 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
                        , 'At:position put:aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
            self generateCommentFor:aStructOrUnionFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
                        declareId:'args_ok'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
                        asString:'int '
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
                        init:'1'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
                    self cBuilder commentWith:'Checking arguments'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
                        if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
                            self nextPutString:'args_ok && '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
                                parenthesesWith:[ self nextPutString:'not __isInteger( position )'. ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
                                        withString:'"Argument position is not integer"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
                            self cBuilder assign:'0' to:'args_ok'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
                        if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
                            self nextPutString:'args_ok && '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
                                parenthesesWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
                                    self nextPutString:'not '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
                                    self cBuilder typeCheck:aStructOrUnionFieldNode id variable:'aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
                                        withString:'"Argument aValue is not instance of expected class"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
                            self cBuilder assign:'0' to:'args_ok'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
                    self cBuilder if:'args_ok'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
                                declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
                                asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
                                init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
                                    self cBuilder valueExtraction:aStructOrUnionFieldNode id
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
                                        variable:'aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
                                to:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
                                    self cBuilder struct:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
                                        access:aStructFieldNode name , '[__longIntVal(position)].' 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
                                                , aStructOrUnionFieldNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
                            self cBuilder return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
    "Modified: / 19-12-2007 / 17:31:13 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
generateArrayCompositeStructAccessMethods:aStructFieldNode in:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
    aStructFieldNode id id reference fields do:[:aStructOrUnionFieldNode|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
      self generateArrayCompositeStructAccessMethod:aStructOrUnionFieldNode in:aStructFieldNode in:aStructNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
generateArrayStructAccessMethod:aStructFieldNode in:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
        methodFor:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
            self nextPutString:aStructFieldNode name , 'At:position'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
                        if:[ self nextPutString:'not __isInteger( position )'. ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   450
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
                                        withString:'"Argument position is not integer"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
                        else:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
                                declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
                                asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
                                init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
                            self cBuilder returnMacro:true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
                                with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
                                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
                                        functionCall:[ self cBuilder objectCreation:aStructFieldNode id ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
                                        withString:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
                                            self cBuilder struct:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
                                                access:aStructFieldNode name , '[__longIntVal(position)]'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
                                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
        methodFor:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   483
        category:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
            self nextPutString:aStructFieldNode name , 'At:position put:aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
                        declareId:'args_ok'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
                        asString:'int '
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
                        init:'1'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
                    self cBuilder commentWith:'Checking arguments'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
                        if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
                            self nextPutString:'args_ok && '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
                                parenthesesWith:[ self nextPutString:'not __isInteger( position )'. ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
                                        withString:'"Argument position is not integer"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
                            self cBuilder assign:'0' to:'args_ok'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
                        if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
                            self nextPutString:'args_ok && '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
                                parenthesesWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
                                    self nextPutString:'not '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
                                    self cBuilder typeCheck:aStructFieldNode id variable:'aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
                                        withString:'"Argument aValue is not instance of expected class"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
                            self cBuilder assign:'0' to:'args_ok'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
                    self cBuilder if:'args_ok'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   536
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
                                declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
                                asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
                                init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
                                assign:[ self cBuilder valueExtraction:aStructFieldNode id variable:'aValue'. ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
                                to:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
                                    self cBuilder struct:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
                                        access:aStructFieldNode name , '[__longIntVal(position)]'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   546
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
                            self cBuilder return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   556
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
    "Modified: / 19-12-2007 / 17:30:19 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
generateBasicStructAccessMethod:aStructFieldNode in:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
        methodFor:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   567
            self nextPutString:aStructFieldNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   568
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   570
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   571
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   572
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   573
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   574
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   575
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   576
                        asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   577
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   578
                    self cBuilder returnMacro:true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   579
                        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   580
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   581
                                functionCall:[ self cBuilder objectCreation:aStructFieldNode id ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
                                withString:[ self cBuilder struct:'temp' access:aStructFieldNode name. ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   588
        methodFor:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   589
        category:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
            self nextPutString:aStructFieldNode name , ':aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
                        if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
                            self nextPutString:'not '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
                            self cBuilder typeCheck:aStructFieldNode id variable:'aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
                                        withString:'"Argument aValue is not instance of expected class"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
                        else:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
                                declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
                                asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
                                init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
                                assign:[ self cBuilder valueExtraction:aStructFieldNode id variable:'aValue'. ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
                                to:[ self cBuilder struct:'temp' access:aStructFieldNode name ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
                            self cBuilder return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   627
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   628
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   629
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   630
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   631
    "Modified: / 19-12-2007 / 17:29:02 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   633
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
generateCallbackCFunction:aFunctionNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   637
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
    self cBuilder function:(self correctMethodName:aFunctionNode name)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
      with:aFunctionNode arguments
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
      return:aFunctionNode return
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
      body:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
        self cBuilder returnC:aFunctionNode return
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
          with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
            self cBuilder methodCall:(self correctMethodName:aFunctionNode name) on:nameSpace,'::',className withArgsSize:aFunctionNode arguments.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645
          ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
      ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   647
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   648
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   649
    "Modified: / 28-11-2007 / 18:08:17 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   651
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
generateCallbackCFunctions
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
    prototypes do:[:aFunctionPrototypeNode|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
      self generateCallbackCFunction:aFunctionPrototypeNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   657
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   658
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
    "Modified: / 16-11-2007 / 15:26:48 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   661
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   662
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   663
generateCallbackSmalltalkMethod:aFunctionPrototypeNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   664
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   665
        methodFor:(className , ' class')
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   666
        category:(parseTree generatedFrom , ' - Callback Methods')
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   667
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   668
            self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
                method:(self correctMethodName:aFunctionPrototypeNode name)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   670
                withArgsSize:(aFunctionPrototypeNode arguments size).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
            self generateCommentFor:aFunctionPrototypeNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   673
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   674
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   675
    "Modified: / 28-11-2007 / 18:06:29 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   676
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   677
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   678
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   679
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   680
generateCallbackSmalltalkMethods
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   681
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   682
    prototypes do:[:aFunctionPrototypeNode|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   683
      self generateCallbackSmalltalkMethod:aFunctionPrototypeNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   684
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   685
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   686
    "Modified: / 27-11-2007 / 15:58:09 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   687
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   688
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   689
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   690
generateComment:aType name:aName id:anId
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
    self stBuilder commentWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   693
      self nextPutString:aType,' ',aName,' is of type '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   694
      self stBuilder typeDescription:anId.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   695
      self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   697
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
    "Modified: / 20-12-2007 / 12:04:49 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   699
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   701
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   702
generateCommentFor:aNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   704
    (aNode references:CFunctionNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   705
      self stBuilder commentWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   706
        self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   707
        (aNode arguments isEmpty) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   708
          1 to:aNode arguments size do:[:pos | 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   709
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   710
            self nextPutString:'argument ',(aNode arguments at:pos) name, ' should be boxed '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   711
            self stBuilder typeDescription:(aNode arguments at:pos) id.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   712
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   713
          ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   714
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   715
        self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   716
        self nextPutString:'function should return boxed '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   717
        self stBuilder typeDescription:aNode return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   718
        self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   719
      ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   720
      ^self.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   721
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   722
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   723
    (aNode references:CFunctionPrototypeNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   724
      self stBuilder commentWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   725
        self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   726
        (aNode arguments isEmpty) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   727
          1 to:aNode arguments size do:[:pos | 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   728
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   729
            self nextPutString:'arg' , pos asString , ' should be boxed '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   730
            self stBuilder typeDescription:(aNode arguments at:pos) id.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   731
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   732
          ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   733
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   734
        self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   735
        self nextPutString:'function should return boxed '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   736
        self stBuilder typeDescription:aNode return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   737
        self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   738
      ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   739
      ^self.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   740
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   741
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   742
    (aNode references:CStructFieldNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   743
      self stBuilder commentWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   744
        self nextPutString:'structure field ' , aNode name , ' is of type '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   745
        self stBuilder typeDescription:aNode id.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   746
        self generateLocalType:(self getIdNode:aNode id) in:parentNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   747
        self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   748
      ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   749
      ^self
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   750
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   751
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   752
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   753
    (aNode references:CTypedefNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   754
      self stBuilder commentWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   755
        self nextPutString:'typedef ' , aNode name , ' is of type '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   756
        self stBuilder typeDescription:aNode id.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   757
        self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   758
      ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   759
      ^self
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   760
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   761
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   762
    ^self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   763
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   764
    "Modified: / 20-12-2007 / 12:05:37 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   765
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   766
    "Modified: / 10-02-2008 / 10:50:19 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   767
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   768
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   769
generateCompositeStructAccessMethod:aStructOrUnionFieldNode in:aStructFieldNode in:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   770
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   771
        methodFor:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   772
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   773
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   774
            self 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   775
                nextPutString:aStructFieldNode name , '_' , aStructOrUnionFieldNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   776
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   777
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   778
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   779
            self generateCommentFor:aStructOrUnionFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   780
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   781
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   782
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   783
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   784
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   785
                        asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   786
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   787
                    self cBuilder returnMacro:true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   788
                        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   789
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   790
                                functionCall:[ self cBuilder objectCreation:aStructOrUnionFieldNode id ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   791
                                withString:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   792
                                    self cBuilder struct:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   793
                                        access:aStructFieldNode name , '.' , aStructOrUnionFieldNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   794
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   795
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   796
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   797
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   798
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   799
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   800
        methodFor:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   801
        category:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   802
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   803
            self 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   804
                nextPutString:aStructFieldNode name , '_' , aStructOrUnionFieldNode name 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   805
                        , ':aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   806
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   807
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   808
            self generateCommentFor:aStructFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   809
            self generateCommentFor:aStructOrUnionFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   810
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   811
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   812
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   813
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   814
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   815
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   816
                        if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   817
                            self nextPutString:'not '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   818
                            self cBuilder typeCheck:aStructOrUnionFieldNode id variable:'aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   819
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   820
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   821
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   822
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   823
                                    self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   824
                                        withString:'"Argument aValue is not instance of expected class"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   825
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   826
                                to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   827
                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   828
                        else:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   829
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   830
                                declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   831
                                asString:(self declarationCString:aStructNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   832
                                init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   833
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   834
                                assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   835
                                    self cBuilder valueExtraction:aStructOrUnionFieldNode id
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   836
                                        variable:'aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   837
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   838
                                to:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   839
                                    self cBuilder struct:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   840
                                        access:aStructFieldNode name , '.' , aStructOrUnionFieldNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   841
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   842
                            self cBuilder return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   843
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   844
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   845
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   846
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   847
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   848
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   849
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   850
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   851
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   852
    "Modified: / 19-12-2007 / 17:29:46 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   853
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   854
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   855
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   856
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   857
generateCompositeStructAccessMethods:aStructFieldNode in:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   858
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   859
    aStructFieldNode id reference fields do:[:aStructOrUnionFieldNode|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   860
      self generateCompositeStructAccessMethod:aStructOrUnionFieldNode in:aStructFieldNode in:aStructNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   861
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   862
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   863
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   864
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   865
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   866
generateInclude
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   867
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   868
    self cBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   869
    self nextPutString:'#define not !!'.self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   870
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   871
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   872
    self cBuilder include:(self includeFromSourceFile:parseTree generatedFrom).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   873
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   874
    "Modified: / 23-11-2007 / 12:20:59 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   875
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   876
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   877
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   878
generateLocalType:anIdNode in:aStructOrUnionNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   879
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   880
    (anIdNode isNil not) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   881
      aStructOrUnionNode fields do:[:aLocalStructOrUnionNode|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   882
        ((aLocalStructOrUnionNode references:StructNode) | (aLocalStructOrUnionNode references:UnionNode)) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   883
          (aLocalStructOrUnionNode name = anIdNode names last) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   884
            self stBuilder typeDescription:aLocalStructOrUnionNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   885
          ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   886
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   887
      ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   888
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   889
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   890
    "Modified: / 20-12-2007 / 12:05:44 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   891
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   892
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   893
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   894
generateStructOrUnionCreateMethod:aStructOrUnionNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   895
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   896
        methodFor:(aStructOrUnionNode name , ' class')
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   897
        category:'instance creation'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   898
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   899
            self stBuilder nextPutString:'create'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   900
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   901
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   902
            self stBuilder declareId:#( 'temp' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   903
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   904
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   905
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   906
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   907
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   908
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   909
                        asString:''
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   910
                        init:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   911
                            self cBuilder functionCall:'__MKEXTERNALADDRESS'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   912
                                withString:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   913
                                    self cBuilder nextPutString:' ('.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   914
                                    self cBuilder nextPutString:aStructOrUnionNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   915
                                    self cBuilder nextPutString:' *) '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   916
                                    self cBuilder functionCall:'malloc'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   917
                                        withString:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   918
                                            self cBuilder functionCall:'sizeof' withString:aStructOrUnionNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   919
                                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   920
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   921
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   922
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   923
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   924
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   925
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   926
            self stBuilder nextPutString:'^self newAddress: temp address.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   927
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   928
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   929
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   930
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   931
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   932
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   933
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   934
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   935
generateStructOrUnionCreateNULLPointerMethod:aStructOrUnionNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   936
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   937
        methodFor:(aStructOrUnionNode name , ' class')
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   938
        category:'instance creation'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   939
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   940
            self stBuilder nextPutString:'createNULLPointer'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   941
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   942
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   943
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   944
            self stBuilder nextPutString:'^self newAddress: 0.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   945
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   946
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   947
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   948
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   949
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   950
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   951
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   952
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   953
generateStructOrUnionFreeMethod:aStructOrUnionNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   954
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   955
        methodFor:aStructOrUnionNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   956
        category:'freeing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   957
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   958
            self stBuilder nextPutString:'free'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   959
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   960
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   961
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   962
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   963
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   964
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   965
                        asString:(self declarationCString:aStructOrUnionNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   966
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   967
                    self cBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   968
                    self cBuilder functionCall:'free' withString:'temp'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   969
                    self cBuilder nextPutString:';'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   970
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   971
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   972
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   973
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   974
            self stBuilder nextPutString:'^self beNull.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   975
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   976
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   977
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   978
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   979
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   980
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   981
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   982
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   983
!SmalltalkXGenerator methodsFor:'initialization'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   984
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   985
initialize
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   986
    "Invoked when a new instance is created."
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   987
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   988
    "/ please change as required (and remove this comment)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   989
    "/ parser := nil.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   990
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   991
    "/ super initialize.   -- commented since inherited method does nothing
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   992
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   993
    outputStream := WriteStream on:''.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   994
    cBuilder := self defaultCBuilder.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   995
    stBuilder := self defaultStBuilder.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   996
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   997
    analyser := Analyser new.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   998
    prototypes := OrderedCollection new.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   999
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1000
    "Modified: / 20-12-2007 / 13:03:56 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1001
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1002
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1003
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1004
!SmalltalkXGenerator methodsFor:'private'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1005
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1006
correctMethodName:aName
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1007
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1008
    (aName startsWith:'_') ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1009
      ^'f',aName,'_callback'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1010
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1011
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1012
    ^aName,'_callback'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1013
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1014
    "Modified: / 25-11-2007 / 10:48:02 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1015
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1016
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1017
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1018
declarationCString:aNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1019
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1020
    ((aNode references:CEnumNode) | (aNode references:CStructNode) | (aNode references:CUnionNode)) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1021
      (aNode typedef) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1022
        (aNode references:CEnumNode) ifTrue:[ ^'enum ',aNode name,' *' ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1023
        (aNode references:CStructNode) ifTrue:[ ^'struct ',aNode name,' *' ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1024
        (aNode references:CUnionNode) ifTrue:[ ^'union ',aNode name,' *' ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1025
      ] ifTrue:[ ^aNode name,' *' ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1026
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1027
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1028
    ^self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1029
    "must be an instance of EnumNode, StructNode or UnionNode"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1030
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1031
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1032
    "Modified: / 10-02-2008 / 10:49:15 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1033
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1034
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1035
getIdNode:aNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1036
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1037
    ^IdNodeGetter on:aNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1038
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1039
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1040
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1041
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1042
includeFromSourceFile:aFilePath
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1043
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1044
     | tmp |
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1045
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1046
    tmp := aFilePath.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1047
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1048
    [
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1049
        (tmp indexOfAny:'/') = 0
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1050
    ] whileFalse:[ tmp := tmp copyFrom:(tmp indexOfAny:'/') + 1 ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1051
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1052
    ^tmp
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1053
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1054
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1055
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1056
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1057
!SmalltalkXGenerator methodsFor:'queries'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1058
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1059
hasLocalDeclaration:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1060
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1061
   |anIdNode|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1062
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1063
   anIdNode := self getIdNode:aStructOrUnionFieldNode id.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1064
   (anIdNode notNil) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1065
     (((anIdNode reference) references:StructNode) | ((anIdNode reference) references:UnionNode))  ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1066
       ^anIdNode reference local
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1067
     ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1068
   ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1069
   ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1070
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1071
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1072
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1073
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1074
hasValidReturn:aReturnNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1075
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1076
    (aReturnNode references:Cface::IdNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1077
        (aReturnNode names first = 'void') ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1078
            ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1079
        ] ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1080
            ^true.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1081
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1082
    ] ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1083
        ^true.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1084
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1085
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1086
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1087
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1088
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1089
isAnyEnum:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1090
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1091
   ((aStructOrUnionFieldNode id) references:IdNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1092
     (((aStructOrUnionFieldNode id) reference) references:EnumNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1093
       ^true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1094
     ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1095
   ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1096
   ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1097
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1098
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1099
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1100
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1101
isAnyStructure:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1102
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1103
   ((aStructOrUnionFieldNode id) references:IdNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1104
     (((aStructOrUnionFieldNode id) reference) references:StructNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1105
       ^true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1106
     ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1107
   ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1108
   ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1109
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1110
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1111
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1112
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1113
isAnyUnion:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1114
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1115
   ((aStructOrUnionFieldNode id) references:IdNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1116
     (((aStructOrUnionFieldNode id) reference) references:UnionNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1117
       ^true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1118
     ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1119
   ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1120
   ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1121
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1122
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1123
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1124
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1125
isArray:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1126
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1127
    ((aStructOrUnionFieldNode id) references:ArrayNode) ifTrue:[ ^true]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1128
    ifFalse:[ ^false].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1129
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1130
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1131
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1132
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1133
isArrayStructure:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1134
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1135
   ((aStructOrUnionFieldNode id) references:CArrayNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1136
     ((aStructOrUnionFieldNode id) id references:IdNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1137
       (((aStructOrUnionFieldNode id) id reference) references:CStructNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1138
       ^true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1139
       ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1140
     ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1141
   ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1142
   ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1143
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1144
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1145
    "Modified: / 10-02-2008 / 10:49:35 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1146
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1147
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1148
isArrayUnion:aStructOrUnionFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1149
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1150
   ((aStructOrUnionFieldNode id) references:CArrayNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1151
     ((aStructOrUnionFieldNode id) id references:IdNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1152
       (((aStructOrUnionFieldNode id) id reference) references:CUnionNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1153
       ^true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1154
       ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1155
     ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1156
   ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1157
   ^false.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1158
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1159
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1160
    "Modified: / 10-02-2008 / 10:49:43 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1161
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1162
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1163
!SmalltalkXGenerator methodsFor:'streaming'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1164
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1165
cr
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1166
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1167
    self nextPut:Character cr
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1168
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1169
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1170
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1171
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1172
nextPut:aCharacter
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1173
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1174
    outputStream nextPut:aCharacter.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1175
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1176
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1177
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1178
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1179
nextPutString:aString
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1180
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1181
    outputStream nextPutAll:aString.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1182
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1183
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1184
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1185
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1186
space
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1187
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1188
    self nextPut:Character space
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1189
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1190
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1191
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1192
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1193
tab
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1194
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1195
    self space;
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1196
         space.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1197
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1198
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1199
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1200
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1201
writeToFile:aFileName
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1202
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1203
    | fileStream |
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1204
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1205
    fileStream := aFileName asFilename writeStream.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1206
    fileStream nextPutAll:outputStream contents.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1207
    fileStream close.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1208
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1209
    "Created: / 08-02-2008 / 08:39:27 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1210
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1211
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1212
!SmalltalkXGenerator methodsFor:'visiting'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1213
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1214
visitCArrayNode:anArrayNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1215
    "shouldn't reach"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1216
    
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1217
    self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1218
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1219
    "Modified: / 14-11-2007 / 11:25:12 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1220
    "Created: / 10-02-2008 / 10:44:35 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1221
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1222
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1223
visitCConstNode:aConstNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1224
    "shouldn't reach"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1225
    
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1226
    self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1227
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1228
    "Modified: / 14-11-2007 / 11:25:08 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1229
    "Created: / 10-02-2008 / 10:44:45 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1230
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1231
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1232
visitCEnumFieldNode:anEnumFieldNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1233
    |enumClassName enumValueClassName|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1234
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1235
    (parentNode references:CEnumNode) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1236
        self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1237
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1238
    enumClassName := mappings smalltalkClassForEnum:parentNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1239
    enumValueClassName := mappings smalltalkClassForEnumValue:anEnumFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1240
    stBuilder
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1241
        class:enumValueClassName superclass:enumClassName;
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1242
        methodFor:enumValueClassName , ' class'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1243
            category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1244
            with:('intValue' , Character cr , Character tab , '^' 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1245
                    , anEnumFieldNode number)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1246
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1247
    "Modified: / 17-02-2008 / 20:52:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1248
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1249
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1250
visitCEnumNode:anEnumNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1251
    |enumClassName|
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1252
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1253
    (anEnumNode foreign) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1254
        ^ self
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1255
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1256
    enumClassName := mappings smalltalkClassForEnum:anEnumNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1257
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1258
        class:enumClassName
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1259
        superclass:'Cface::CEnum'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1260
        category:nameSpace , ' - C Enumerations'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1261
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1262
    parentNode := anEnumNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1263
    self visit:anEnumNode fields.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1264
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1265
    "Modified: / 05-12-2007 / 21:42:56 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1266
    "Created: / 10-02-2008 / 10:44:59 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1267
    "Modified: / 17-02-2008 / 20:52:00 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1268
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1269
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1270
visitCFileNode:aFileNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1271
    self stBuilder package:'__NoProject__'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1272
    self stBuilder namespace:nameSpace.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1273
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1274
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1275
        class:#CInterface
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1276
        superclass:'Object'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1277
        category:nameSpace , ' - C Interface'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1278
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1279
    self stBuilder primitiveDefinitionsFor:className
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1280
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1281
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1282
                definitionPrimitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1283
                    self cBuilder commentWith:'here place needed include directives'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1284
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1285
                    self generateInclude.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1286
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1287
                    (prototypes isEmpty) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1288
                        self cBuilder commentWith:'Callbacks'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1289
                        (self cBuilder)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1290
                            commentWith:'If you need one, uncomment it';
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1291
                            cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1292
                        (self cBuilder)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1293
                            commentWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1294
                                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1295
                                    self generateCallbackCFunctions
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1296
                                ];
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1297
                            cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1298
                    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1299
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1300
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1301
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1302
    self visit:aFileNode defBody.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1303
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1304
    self generateCallbackSmalltalkMethods.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1305
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1306
    self nextPutString:'!!'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1307
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1308
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1309
    "Modified: / 28-11-2007 / 18:14:53 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1310
    "Created: / 10-02-2008 / 10:45:06 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1311
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1312
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1313
visitCFunctionNode:aFunctionNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1314
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1315
        methodFor:(className , ' class')
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1316
        category:parseTree generatedFrom
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1317
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1318
            self stBuilder method:aFunctionNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1319
                withArgs:(aFunctionNode arguments).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1320
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1321
            self generateCommentFor:aFunctionNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1322
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1323
            self stBuilder declareId:#( 'errorString' ).
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1324
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1325
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1326
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1327
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1328
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1329
                        declareId:'args_ok'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1330
                        asString:'int '
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1331
                        init:'1'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1332
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1333
                    (aFunctionNode arguments isEmpty) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1334
                        self cBuilder commentWith:'Checking arguments'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1335
                        1 to:aFunctionNode arguments size do:[:pos | 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1336
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1337
                                if:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1338
                                    self nextPutString:'args_ok && '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1339
                                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1340
                                        parenthesesWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1341
                                            self nextPutString:'not '.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1342
                                            self cBuilder typeCheck:(aFunctionNode arguments at:pos) id
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1343
                                                variable:(aFunctionNode arguments at:pos) name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1344
                                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1345
                                ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1346
                                then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1347
                                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1348
                                        assign:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1349
                                            self cBuilder functionCall:'__MKSTRING'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1350
                                                withString:'"Argument ' , (aFunctionNode arguments at:pos) name 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1351
                                                        , ' is not instance of expected class"'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1352
                                        ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1353
                                        to:'errorString'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1354
                                    self cBuilder assign:'0' to:'args_ok'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1355
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1356
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1357
                    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1358
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1359
                    self cBuilder commentWith:'Calling function'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1360
                    self cBuilder if:'args_ok'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1361
                        then:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1362
                            self cBuilder returnMacro:(self hasValidReturn:aFunctionNode return)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1363
                                with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1364
                                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1365
                                        objectCreation:(self hasValidReturn:aFunctionNode return)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1366
                                        id:(aFunctionNode return)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1367
                                        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1368
                                            self cBuilder functionCall:aFunctionNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1369
                                                withArgs:aFunctionNode arguments.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1370
                                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1371
                                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1372
                            (self hasValidReturn:aFunctionNode return) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1373
                                self cBuilder return.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1374
                            ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1375
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1376
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1377
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1378
            self stBuilder commentWith:'If reached, primitive code has failed'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1379
            self stBuilder makeIndent.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1380
            self nextPutString:'^self primitiveFailed: errorString.'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1381
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1382
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1383
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1384
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1385
    "Modified: / 19-12-2007 / 15:51:21 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1386
    "Created: / 10-02-2008 / 10:45:12 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1387
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1388
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1389
visitCPointerNode:aPointerNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1390
    "shouldn't reach"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1391
    
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1392
    self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1393
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1394
    "Modified: / 14-11-2007 / 11:24:50 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1395
    "Created: / 10-02-2008 / 10:45:24 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1396
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1397
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1398
visitCStructFieldNode:aStructFieldNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1399
    ((parentNode references:CStructNode) 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1400
        or:[(parentNode references:CUnionNode)]) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1401
        self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1402
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1403
    (self isArray:aStructFieldNode) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1404
        ((self isArrayStructure:aStructFieldNode) 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1405
            | (self isArrayUnion:aStructFieldNode)) 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1406
                ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1407
                    ^ self generateArrayCompositeStructAccessMethods:aStructFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1408
                        in:parentNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1409
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1410
        self generateArrayStructAccessMethod:aStructFieldNode in:parentNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1411
    ] ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1412
        ((self isAnyStructure:aStructFieldNode) 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1413
            | (self isAnyUnion:aStructFieldNode)) 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1414
                ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1415
                    ^ self generateCompositeStructAccessMethods:aStructFieldNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1416
                        in:parentNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1417
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1418
        self generateBasicStructAccessMethod:aStructFieldNode in:parentNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1419
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1420
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1421
    "Modified: / 27-11-2007 / 18:26:51 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1422
    "Created: / 10-02-2008 / 10:45:36 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1423
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1424
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1425
visitCStructNode:aStructNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1426
    (aStructNode foreign | aStructNode local) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1427
        ^ self
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1428
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1429
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1430
        class:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1431
        superclass:'ExternalAddress'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1432
        category:nameSpace , ' - C Structures'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1433
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1434
    self stBuilder primitiveDefinitionsFor:aStructNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1435
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1436
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1437
                definitionPrimitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1438
                    self cBuilder commentWith:'here place needed include directives'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1439
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1440
                    self generateInclude.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1441
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1442
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1443
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1444
    (aStructNode fields isEmpty) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1445
        self generateStructOrUnionCreateMethod:aStructNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1446
        self generateStructOrUnionFreeMethod:aStructNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1447
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1448
    self generateStructOrUnionCreateNULLPointerMethod:aStructNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1449
    parentNode := aStructNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1450
    self visit:aStructNode fields.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1451
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1452
    "Modified: / 06-01-2008 / 16:10:11 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1453
    "Created: / 10-02-2008 / 10:45:43 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1454
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1455
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1456
visitCTypedefNode:aTypeDefNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1457
    (aTypeDefNode foreign) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1458
        ^ self
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1459
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1460
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1461
        class:aTypeDefNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1462
        superclass:'ExternalAddress'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1463
        category:nameSpace , ' - C TypeDefs'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1464
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1465
    self stBuilder primitiveDefinitionsFor:aTypeDefNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1466
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1467
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1468
                definitionPrimitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1469
                    self cBuilder commentWith:'here place needed include directives'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1470
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1471
                    self generateInclude.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1472
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1473
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1474
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1475
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1476
        methodFor:aTypeDefNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1477
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1478
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1479
            self nextPutString:'value'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1480
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1481
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1482
            self generateCommentFor:aTypeDefNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1483
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1484
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1485
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1486
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1487
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1488
                        asString:aTypeDefNode name , ' *'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1489
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1490
                    self cBuilder returnMacro:true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1491
                        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1492
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1493
                                functionCall:[ self cBuilder objectCreation:aTypeDefNode id ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1494
                                withString:'temp'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1495
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1496
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1497
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1498
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1499
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1500
        methodFor:aTypeDefNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1501
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1502
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1503
            self nextPutString:'value:aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1504
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1505
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1506
            self generateCommentFor:aTypeDefNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1507
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1508
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1509
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1510
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1511
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1512
                        asString:aTypeDefNode name , ' *'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1513
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1514
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1515
                        assign:[ self cBuilder valueExtraction:aTypeDefNode id variable:'aValue'. ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1516
                        to:'temp'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1517
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1518
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1519
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1520
    "Modified: / 19-12-2007 / 17:31:47 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1521
    "Created: / 10-02-2008 / 10:45:50 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1522
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1523
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1524
visitCUnionNode:aUnionNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1525
    (aUnionNode foreign) ifTrue:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1526
        ^ self
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1527
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1528
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1529
        class:aUnionNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1530
        superclass:'ExternalAddress'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1531
        category:nameSpace , ' - C Unions'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1532
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1533
    self stBuilder primitiveDefinitionsFor:aUnionNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1534
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1535
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1536
                definitionPrimitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1537
                    self cBuilder commentWith:'here place needed include directives'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1538
                    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1539
                    self generateInclude.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1540
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1541
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1542
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1543
    (aUnionNode fields isEmpty) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1544
        self generateStructOrUnionCreateMethod:aUnionNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1545
        self generateStructOrUnionFreeMethod:aUnionNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1546
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1547
    self generateStructOrUnionCreateNULLPointerMethod:aUnionNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1548
    parentNode := aUnionNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1549
    self visit:aUnionNode fields.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1550
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1551
    "Modified: / 06-01-2008 / 16:10:27 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1552
    "Created: / 10-02-2008 / 10:46:54 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1553
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1554
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1555
visitIdNode:anIdNode
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1556
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1557
    "shouldn't reach"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1558
    self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1559
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1560
    "Modified: / 14-11-2007 / 11:24:56 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1561
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1562
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1563
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1564
visitSequenceableCollection:aCollection with:aParameter 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1565
    aCollection do:[:aNode | 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1566
        self visit:aNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1567
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1568
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1569
    "Created: / 08-02-2008 / 08:39:26 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1570
!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1571
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1572
visitUnionFieldNode:aUnionFieldNode 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1573
    (parentNode references:CUnionNode) ifFalse:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1574
        self error.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1575
    ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1576
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1577
        methodFor:parentNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1578
        category:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1579
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1580
            self nextPutString:aUnionFieldNode name.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1581
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1582
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1583
            self generateCommentFor:aUnionFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1584
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1585
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1586
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1587
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1588
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1589
                        asString:(self declarationCString:parentNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1590
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1591
                    self cBuilder returnMacro:true
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1592
                        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1593
                            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1594
                                functionCall:[ self cBuilder objectCreation:aUnionFieldNode id ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1595
                                withString:[ self cBuilder struct:'temp' access:aUnionFieldNode name. ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1596
                        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1597
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1598
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1599
    self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1600
    self stBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1601
        methodFor:'accessing'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1602
        category:parentNode name
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1603
        with:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1604
            self nextPutString:aUnionFieldNode name , ':aValue'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1605
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1606
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1607
            self generateCommentFor:aUnionFieldNode.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1608
            self cr.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1609
            self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1610
                primitiveWith:[
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1611
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1612
                        declareId:'temp'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1613
                        asString:(self declarationCString:parentNode)
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1614
                        init:'__externalAddressVal( self )'.
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1615
                    self cBuilder 
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1616
                        assign:[ self cBuilder valueExtraction:aUnionFieldNode id variable:'aValue'. ]
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1617
                        to:[ self cBuilder struct:'temp' access:aUnionFieldNode name ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1618
                ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1619
        ].
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1620
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1621
    "Modified: / 19-12-2007 / 17:30:01 / haja"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1622
    "Created: / 08-02-2008 / 08:39:27 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1623
    "Modified: / 10-02-2008 / 11:16:09 / janfrog"
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1624
! !
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1625
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1626
!SmalltalkXGenerator class methodsFor:'documentation'!
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1627
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1628
version
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1629
    ^ '$Header: /opt/data/cvs/cvut-fel/cface/Cface__SmalltalkXGenerator.st,v 1.1 2008/02/26 18:25:12 vranyj1 Exp $'
b6c0180314d1 Initial import
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1630
! !