ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
varptr.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
48/* <usermanual>
49@keyword VARPTR
50
51@english
52
53The ''VARPTR'' command (short for "variable pointer") is a pretty advanced statement
54that lets you get the memory address of a variable. Essentially, it tells you "where"
55in memory the value of a specific variable is stored.
56
57In some advanced cases, you may want to directly manipulate the contents of memory.
58This is useful for things like creating custom data structures or optimizing the
59speed of execution of certain operations.
60
61Directly manipulating memory can lead to program errors that are difficult to
62detect and correct. If you are not completely sure what you are doing, it is
63 best to avoid using ''VARPTR''.
64
65@italian
66
67Il comando ''VARPTR'' (abbreviazione di "puntatore di variabile") è un'istruzione piuttosto
68 avanzata che consente di ottenere l'indirizzo di memoria di una variabile. In
69 sostanza, indica "dove" nella memoria è archiviato il valore di una variabile specifica.
70
71In alcuni casi avanzati, potresti voler manipolare direttamente il contenuto della memoria.
72Ciò è utile per cose come la creazione di strutture dati personalizzate o l'ottimizzazione
73della velocità di esecuzione di determinate operazioni.
74
75La manipolazione diretta della memoria può portare a errori di programma difficili da
76rilevare e correggere. Se non sei completamente sicuro di cosa stai facendo, è meglio
77evitare di usare ''VARPTR''.
78
79@syntax = VARPTR(var)
80
81@example address = VARPTR(x)
82
83</usermanual> */
84Variable * varptr( Environment * _environment, char * _name ) {
85
86 Variable * name = variable_retrieve( _environment, _name );
87 Variable * result = variable_temporary( _environment, VT_ADDRESS, "(address)" );
88
89 cpu_addressof_16bit( _environment, name->realName, result->realName );
90
91 return result;
92
93}
94
void cpu_addressof_16bit(Environment *_environment, char *_source, char *_destination)
Definition 6309.c:1485
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
char * name
Definition _optimizer.c:672
char * realName
Definition ugbc.h:982
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_ADDRESS
Definition ugbc.h:465
Variable * varptr(Environment *_environment, char *_name)
Emit code for function = VARPTR( ... ).
Definition varptr.c:84