Changeset 590
- Timestamp:
- 07/30/10 05:16:35 (14 years ago)
- Files:
-
- branches/dmd-1.x/src/expression.c (modified) (1 diff)
- branches/dmd-1.x/src/libelf.c (modified) (1 diff)
- trunk/src/expression.c (modified) (1 diff)
- trunk/src/libelf.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/expression.c
r587 r590 6035 6035 6036 6036 DelegateExp::DelegateExp(Loc loc, Expression *e, FuncDeclaration *f) 6037 6037 : UnaExp(loc, TOKdelegate, sizeof(DelegateExp), e) 6038 6038 { 6039 6039 this->func = f; 6040 6040 } 6041 6041 6042 6042 Expression *DelegateExp::semantic(Scope *sc) 6043 6043 { 6044 6044 #if LOGSEMANTIC 6045 6045 printf("DelegateExp::semantic('%s')\n", toChars()); 6046 6046 #endif 6047 6047 if (!type) 6048 6048 { 6049 6049 e1 = e1->semantic(sc); 6050 6050 type = new TypeDelegate(func->type); 6051 6051 type = type->semantic(loc, sc); 6052 6052 AggregateDeclaration *ad = func->toParent()->isAggregateDeclaration(); 6053 6053 if (func->needThis()) 6054 6054 e1 = getRightThis(loc, sc, ad, e1, func); 6055 if (ad && ad-> type != e1->type)6055 if (ad && ad->isClassDeclaration() && ad->type != e1->type) 6056 6056 { // A downcast is required for interfaces, see Bugzilla 3706 6057 6057 e1 = new CastExp(loc, e1, ad->type); 6058 6058 e1 = e1->semantic(sc); 6059 6059 } 6060 6060 } 6061 6061 return this; 6062 6062 } 6063 6063 6064 6064 void DelegateExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 6065 6065 { 6066 6066 buf->writeByte('&'); 6067 6067 if (!func->isNested()) 6068 6068 { 6069 6069 expToCBuffer(buf, hgs, e1, PREC_primary); 6070 6070 buf->writeByte('.'); 6071 6071 } 6072 6072 buf->writestring(func->toChars()); 6073 6073 } 6074 6074 6075 6075 /************************************************************/ branches/dmd-1.x/src/libelf.c
r428 r590 144 144 h->object_name[len] = '/'; 145 145 assert(len < OBJECT_NAME_SIZE); 146 146 memset(h->object_name + len + 1, ' ', OBJECT_NAME_SIZE - (len + 1)); 147 147 } 148 148 else 149 149 { 150 150 len = sprintf(h->object_name, "/%d", om->name_offset); 151 151 h->object_name[len] = ' '; 152 152 } 153 153 154 154 /* In the following sprintf's, don't worry if the trailing 0 155 155 * that sprintf writes goes off the end of the field. It will 156 156 * write into the next field, which we will promptly overwrite 157 157 * anyway. (So make sure to write the fields in ascending order.) 158 158 */ 159 159 160 160 len = sprintf(h->file_time, "%lu", om->file_time); 161 161 assert(len <= 12); 162 162 memset(h->file_time + len, ' ', 12 - len); 163 163 164 if (om->user_id > 999999) 165 om->user_id = 0; 164 166 len = sprintf(h->user_id, "%u", om->user_id); 165 167 assert(len <= 6); 166 168 memset(h->user_id + len, ' ', 6 - len); 167 169 168 170 len = sprintf(h->group_id, "%u", om->group_id); 169 171 assert(len <= 6); 170 172 memset(h->group_id + len, ' ', 6 - len); 171 173 172 174 len = sprintf(h->file_mode, "%o", om->file_mode); 173 175 assert(len <= 8); 174 176 memset(h->file_mode + len, ' ', 8 - len); 175 177 176 178 len = sprintf(h->file_size, "%u", om->length); 177 179 assert(len <= 10); 178 180 memset(h->file_size + len, ' ', 10 - len); 179 181 180 182 h->trailer[0] = '`'; 181 183 h->trailer[1] = '\n'; 182 184 } 183 185 trunk/src/expression.c
r587 r590 6370 6370 DelegateExp::DelegateExp(Loc loc, Expression *e, FuncDeclaration *f, int hasOverloads) 6371 6371 : UnaExp(loc, TOKdelegate, sizeof(DelegateExp), e) 6372 6372 { 6373 6373 this->func = f; 6374 6374 this->hasOverloads = hasOverloads; 6375 6375 } 6376 6376 6377 6377 Expression *DelegateExp::semantic(Scope *sc) 6378 6378 { 6379 6379 #if LOGSEMANTIC 6380 6380 printf("DelegateExp::semantic('%s')\n", toChars()); 6381 6381 #endif 6382 6382 if (!type) 6383 6383 { 6384 6384 e1 = e1->semantic(sc); 6385 6385 type = new TypeDelegate(func->type); 6386 6386 type = type->semantic(loc, sc); 6387 6387 AggregateDeclaration *ad = func->toParent()->isAggregateDeclaration(); 6388 6388 if (func->needThis()) 6389 6389 e1 = getRightThis(loc, sc, ad, e1, func); 6390 if (ad && ad-> type != e1->type)6390 if (ad && ad->isClassDeclaration() && ad->type != e1->type) 6391 6391 { // A downcast is required for interfaces, see Bugzilla 3706 6392 6392 e1 = new CastExp(loc, e1, ad->type); 6393 6393 e1 = e1->semantic(sc); 6394 6394 } 6395 6395 } 6396 6396 return this; 6397 6397 } 6398 6398 6399 6399 void DelegateExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 6400 6400 { 6401 6401 buf->writeByte('&'); 6402 6402 if (!func->isNested()) 6403 6403 { 6404 6404 expToCBuffer(buf, hgs, e1, PREC_primary); 6405 6405 buf->writeByte('.'); 6406 6406 } 6407 6407 buf->writestring(func->toChars()); 6408 6408 } 6409 6409 6410 6410 /************************************************************/ trunk/src/libelf.c
r428 r590 144 144 h->object_name[len] = '/'; 145 145 assert(len < OBJECT_NAME_SIZE); 146 146 memset(h->object_name + len + 1, ' ', OBJECT_NAME_SIZE - (len + 1)); 147 147 } 148 148 else 149 149 { 150 150 len = sprintf(h->object_name, "/%d", om->name_offset); 151 151 h->object_name[len] = ' '; 152 152 } 153 153 154 154 /* In the following sprintf's, don't worry if the trailing 0 155 155 * that sprintf writes goes off the end of the field. It will 156 156 * write into the next field, which we will promptly overwrite 157 157 * anyway. (So make sure to write the fields in ascending order.) 158 158 */ 159 159 160 160 len = sprintf(h->file_time, "%lu", om->file_time); 161 161 assert(len <= 12); 162 162 memset(h->file_time + len, ' ', 12 - len); 163 163 164 if (om->user_id > 999999) 165 om->user_id = 0; 164 166 len = sprintf(h->user_id, "%u", om->user_id); 165 167 assert(len <= 6); 166 168 memset(h->user_id + len, ' ', 6 - len); 167 169 168 170 len = sprintf(h->group_id, "%u", om->group_id); 169 171 assert(len <= 6); 170 172 memset(h->group_id + len, ' ', 6 - len); 171 173 172 174 len = sprintf(h->file_mode, "%o", om->file_mode); 173 175 assert(len <= 8); 174 176 memset(h->file_mode + len, ' ', 8 - len); 175 177 176 178 len = sprintf(h->file_size, "%u", om->length); 177 179 assert(len <= 10); 178 180 memset(h->file_size + len, ' ', 10 - len); 179 181 180 182 h->trailer[0] = '`'; 181 183 h->trailer[1] = '\n'; 182 184 } 183 185
